﻿
/** 
 * AUTHOR: 剑入心穿
 * TIME: 2024.03.09-16.32.58
 * ATTENTION: onStart 等UI脚本自带函数不可改写为异步执行，有需求的异步逻辑请使用函数封装，通过函数接口在内部使用
 */

import { GlobalData } from "../Config/GlobalData";
import FightTimeUI_Generate from "../ui-generate/FightTimeUI_generate";

export default class FightTimeUI extends FightTimeUI_Generate {

	/** 
	 * 构造UI文件成功后，在合适的时机最先初始化一次 
	 */
	protected onStart() {
		//设置能否每帧触发onUpdate
		this.canUpdate = true;
		this.layer = UILayerMiddle;
		this.reserveTime.text = GlobalData.Time.reserveTime.toString() + "s";
		this.thinkTime.text = GlobalData.Time.thinkTime.toString() + "s";
	}

	/** 
		 * 增加思考时间并更新UI显示
		 * @param timeToAdd 要增加的时间
		 */
	public increaseThinkTimeAndUI(timeToAdd: number): void {
		this.thinkTimeChange.text = `+${timeToAdd}s`;
		this.showAndHideText(this.thinkTimeChange);
	}

	/** 
	 * 减少后备时间并更新UI显示
	 * @param timeToReduce 要减少的时间
	 */
	public decreaseReserveTimeAndUI(timeToReduce: number): void {
		this.reserveTimeChange.text = `-${timeToReduce}s`;
		this.showAndHideText(this.reserveTimeChange);
	}
	/** 
		 * 在一段时间后隐藏文本框
		 * @param textUI 要隐藏的文本框
		 */
	private async showAndHideText(textUI: any): Promise<void> {
		await this.delay(1000); // 等待1秒
		textUI.text = ''; // 清空文本框内容
	}

	/** 
	 * 延迟执行函数
	 * @param ms 延迟的时间，毫秒
	 */
	private delay(ms: number): Promise<void> {
		return new Promise(resolve => setTimeout(resolve, ms));
	}
	/** 
	 * 构造UI文件成功后，onStart之后 
	 * 对于UI的根节点的添加操作，进行调用
	 * 注意：该事件可能会多次调用
	 */
	protected onAdded() {
	}

	/** 
	 * 构造UI文件成功后，onAdded之后
	 * 对于UI的根节点的移除操作，进行调用
	 * 注意：该事件可能会多次调用
	 */
	protected onRemoved() {
	}

	/** 
	* 构造UI文件成功后，UI对象再被销毁时调用 
	* 注意：这之后UI对象已经被销毁了，需要移除所有对该文件和UI相关对象以及子对象的引用
	*/
	protected onDestroy() {
	}

	/**
	* 每一帧调用
	* 通过canUpdate可以开启关闭调用
	* dt 两帧调用的时间差，毫秒
	*/
	protected onUpdate(dt: number) {
		this.reserveTime.text = GlobalData.Time.reserveTime.toString() + "s";
		this.thinkTime.text = GlobalData.Time.thinkTime.toString() + "s";
	}



}
